package gui;

import gui.nodes.AbstractNode;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.SpringLayout;

import business.SalleBL;

public class SalleUIConsulter extends AbstractViewPane {

	
	ViewMode currentViewMode;
		
	// champs du formulaire
	private JTextField textFieldNomSalle;
	private JSpinner spinCapaciteSalle;
	
	// variables d'affichage du formulaire
	private int idSalle = -1;
	private String nomSalle = ""; 
	private String ancienNomSalle = ""; 
	private int capaciteSalle = 0;
	
	
	private AbstractNode creator;
	
	private ComponentList componentList = new ComponentList();
	
	
	public SalleUIConsulter(AbstractNode creator, ViewMode v, int salleId) {
		this.creator = creator;
		//System.out.println("viewmode : " + v);
		currentViewMode = v;
		initGUI(salleId);
	}
	
	
	@Override
	public String getTitle() {
		if (currentViewMode == ViewMode.CONSULTATION){
			return "Consultation des informations d'une salle";
		}else if (currentViewMode == ViewMode.MODIFICATION){
			return "Modification des informations d'une salle";
		}else if (currentViewMode == ViewMode.AJOUT) {
			return "Ajout d'une salle";
		}else {
			return "Probleme avec le viewmode";
		}
	}
	
	
	@Override
	public boolean hasBeenModified() {
		return (currentViewMode != ViewMode.CONSULTATION);
	}

	private void initGUI(int salleId) {

		SalleBL salleBL;
		
		// si l'id du noeud envoyé est -1, on est en mode ajout, les champs
		// seront donc vides
		if (currentViewMode != ViewMode.AJOUT) {
			// si on est en consultation ou modification (récuperation des
			// elements en base)
			salleBL = new SalleBL(salleId);
			idSalle = salleId;
			nomSalle = salleBL.getNomSalle();
			ancienNomSalle = nomSalle;
			capaciteSalle = salleBL.getCapaciteSalle();
		}
		
        //Create and populate the panel.
		JPanel p = new JPanel(new SpringLayout());
		JLabel l = new JLabel("Nom :", JLabel.TRAILING);
        p.add(l);
		

        textFieldNomSalle = new JTextField (nomSalle);
        componentList.add(textFieldNomSalle);
        p.add(textFieldNomSalle);
        l.setLabelFor(textFieldNomSalle);
        
        l = new JLabel("Capacité :", JLabel.TRAILING);
        p.add(l);

        SpinnerModel sm = new SpinnerNumberModel(capaciteSalle, 0, 500, 1);
        spinCapaciteSalle = new JSpinner (sm);
        l.setLabelFor(spinCapaciteSalle);
        p.add(spinCapaciteSalle);
        componentList.add(spinCapaciteSalle);

            

        //Lay out the panel.
        SpringUtilities.makeCompactGrid(p,
                                        2, 2, //rows, cols
                                        6, 6,        //initX, initY
                                        6, 6);       //xPad, yPad
        
        add(p, BorderLayout.NORTH);
        
        if (currentViewMode != ViewMode.CONSULTATION) {
        	// Mode modification - afficher les boutons
        		showCommandBox();
        }
        else {
        	componentList.disableAll();
        }
  	}
	
	private void showCommandBox() {
        JPanel commandBox = new JPanel();
        JButton save = new JButton("Enregistrer");
        save.setActionCommand("Enregistrer");
        save.addActionListener(new SalleListener());
        commandBox.add(save);
        drawCommandBox(commandBox);
	}

	// inner class chargée de gérer l'écoute du bouton d'enregistrement du formulaire
	private class SalleListener implements ActionListener {

	public void actionPerformed(ActionEvent arg0) {
		if (arg0.getActionCommand().equals("Enregistrer")) {
			System.out.println("Demande d'enregistrement");
			SalleBL salleSave = new SalleBL();
			// si -1, c'est un ajout d'une salle, sinon modification de
			// la salle de l'id concerné
			if (getId() == -1) {
				salleSave.ajouterSalle(getId(), getNomSalle(), getCapaciteSalle());
				componentList.disableAll();
			} else {
				salleSave.modifierSalle(getId(), getNomSalle(), getCapaciteSalle(), ancienNomSalle);
				componentList.disableAll();
			}
			
			creator.refresh();
		}
	}
}
	
	
	//accesseurs

public int getId() {
	return idSalle;
}

public String getNomSalle() {
	return textFieldNomSalle.getText();
}

public int getCapaciteSalle() {
	return Integer.parseInt(spinCapaciteSalle.getValue().toString());
}
	
}
